/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.mybeans;
  

import org.mybeans.CierreMensualBeans;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import javax.swing.JOptionPane;
  
/**
 *
 * @author avbravo
 */
public class ProcesarMorosidadIndividualContribuyentesBeans {

    Sesion sesion;
    CierreMensualBeans cierreMensualBeans;
    PagosMensualesBeans pagosMensualesBeans;
    PagosAnualesBeans pagosAnualesBeans;
    MorosidadMensualBeans morosidadMensualBeans;
    RecargoMensualBeans recargoMensualBeans;
    PorcentajesMorosidadMensualBeans porcentajesMorosidadMensualBeans;
    PorcentajesMorosidadAnualBeans porcentajesMorosidadAnualBeans;
    String Mes;
    int NumeroMesActual;
    int NumeroMesInscripcion;
    int NumeroMesPago;
    int Anio;
    String IdRegimen;
    double Valor;
    String PeriodoPago;
    double porcentajeMorosidadMensual;
    double porcentajeMorosidadAnual;
    String Cedula;
    // se usa para controlar cuando es un impuesto que
    //se agrega o cuando es cierre.
    //se tomaran dos valores:(agregar,cierre)

    String TipoProcesoImpuestos;

    public String getTipoProcesoImpuestos() {
        return TipoProcesoImpuestos;
    }

    public void setTipoProcesoImpuestos(String TipoProcesoImpuestos) {
        this.TipoProcesoImpuestos = TipoProcesoImpuestos;
    }


    public int getNumeroMesPago() {
        return NumeroMesPago;
    }

    public void setNumeroMesPago(int NumeroMesPago) {
        this.NumeroMesPago = NumeroMesPago;
    }

    public int getNumeroMesInscripcion() {
        return NumeroMesInscripcion;
    }

    public void setNumeroMesInscripcion(int NumeroMesInscripcion) {
        this.NumeroMesInscripcion = NumeroMesInscripcion;
    }

    public int getNumeroMesActual() {
        return NumeroMesActual;
    }

    public void setNumeroMesActual(int NumeroMesActual) {
        this.NumeroMesActual = NumeroMesActual;
    }

    public double getValor() {
        return Valor;
    }

    public String getPeriodoPago() {
        return PeriodoPago;
    }

    public void setPeriodoPago(String PeriodoPago) {
        this.PeriodoPago = PeriodoPago;
    }

    public void setValor(double Valor) {
        this.Valor = Valor;
    }

    public String getCedula() {
        return Cedula;
    }

    public void setCedula(String Cedula) {
        this.Cedula = Cedula;
    }

    public String getIdRegimen() {
        return IdRegimen;
    }

    public void setIdRegimen(String IdRegimen) {
        this.IdRegimen = IdRegimen;
    }

    public ProcesarMorosidadIndividualContribuyentesBeans() {
        sesion = new Sesion();
        cierreMensualBeans = new CierreMensualBeans();
        pagosMensualesBeans = new PagosMensualesBeans();
        morosidadMensualBeans = new MorosidadMensualBeans();
        recargoMensualBeans = new RecargoMensualBeans();
        porcentajesMorosidadMensualBeans = new PorcentajesMorosidadMensualBeans();
        porcentajesMorosidadAnualBeans = new PorcentajesMorosidadAnualBeans();
        pagosAnualesBeans = new PagosAnualesBeans();
        //cargar el porcentaje de morosidad mensual
        cargarPorcentajeMorosidadMensual();
        cargarPorcentajeMorosidadAnual();
    }

    public int getAnio() {
        return Anio;
    }

    public void setAnio(int Anio) {
        this.Anio = Anio;
    }

    public String getMes() {
        return Mes;
    }

    public void setMes(String Mes) {
        this.Mes = Mes;
    }

    public void ProcesarMorosidadDelImpuesto() {
        try {
            String sql;
            String contribuyente;
            String[] arrayMes = sesion.getArrayMeses();
            /*
             *verificar el periodo de pago para crear los impuestos necesarios
             */
            String periodopago = this.PeriodoPago;
            periodopago = periodopago.toLowerCase();
            if (periodopago.equals("mensual")) {

                morosidadMensualBeans.setId(this.Cedula);
                morosidadMensualBeans.setTipoId("contribuyentes");
                morosidadMensualBeans.setIdMunicipio(sesion.getIdmunicipio());
                morosidadMensualBeans.setAnio(this.Anio);
                morosidadMensualBeans.setMes(this.Mes);
                morosidadMensualBeans.setUltimoMes(this.Mes);
                morosidadMensualBeans.setIdRegimen(this.IdRegimen);
                int nmes = this.NumeroMesActual - this.NumeroMesInscripcion;
                double saldo;
                if (nmes == 0) {
                    saldo = this.Valor;
                } else {
                    saldo = this.Valor * nmes;
                }
//para poner la morosidad para el mes actual le sumo ya que se inicia en 0
                morosidadMensualBeans.setNumeroMes(getNumeroMesActual());

                morosidadMensualBeans.setSaldoActual(saldo);
                morosidadMensualBeans.Agregar();

                /*
                 *Procesar el recargo mensual
                 */
                recargoMensualBeans.setId(this.Cedula);
                recargoMensualBeans.setTipoId("contribuyentes");
                recargoMensualBeans.setIdMunicipio(sesion.getIdmunicipio());
                recargoMensualBeans.setAnio(this.Anio);
                recargoMensualBeans.setMes(this.Mes);
                recargoMensualBeans.setIdRegimen(this.IdRegimen);

                double nporcentaje = 0;

                double recargoactual;
                double recargoTotal = 0.0;
                nporcentaje = this.porcentajeMorosidadMensual;
                for (int m = this.NumeroMesInscripcion; m < this.NumeroMesActual; m++) {
                    recargoactual = this.Valor * (nporcentaje / 100);
                    recargoTotal += recargoactual;
                    nporcentaje++;
                }
                nporcentaje--;
                recargoMensualBeans.setNumeroPorcentaje(nporcentaje);
                recargoMensualBeans.setRecargoActual(recargoTotal);

                //agregamos la morosidad
                recargoMensualBeans.Agregar();
            //guardamos el cierre

            } else {
                /*
                 * es un impuesto de pago anual
                 */
                ControlarPagoAnual();
            }


        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error " + ex.getMessage(), "Error. ProcesarContribuyentes()", JOptionPane.ERROR_MESSAGE);

        }
    }

    /*
     *Controla el pago anual realizado 
     */
    private void ControlarPagoAnual() {
        try {

            if (NumeroMesInscripcion <= NumeroMesPago && NumeroMesPago < NumeroMesActual) {
             
             
                recargoMensualBeans.setId(this.Cedula);
                recargoMensualBeans.setTipoId("contribuyentes");
                recargoMensualBeans.setIdMunicipio(sesion.getIdmunicipio());
                recargoMensualBeans.setAnio(this.Anio);
                recargoMensualBeans.setMes(this.Mes);
                recargoMensualBeans.setIdRegimen(this.IdRegimen);

                double nporcentaje = 0;

                double recargoactual;


                nporcentaje = this.porcentajeMorosidadAnual;
                recargoactual = this.Valor * (nporcentaje / 100);
                recargoMensualBeans.setNumeroPorcentaje(nporcentaje);

                NumberFormat formatter = new DecimalFormat("#.00");
                String sRecargoActual = formatter.format(recargoactual);
                recargoactual = Double.parseDouble(sRecargoActual);
                recargoMensualBeans.setRecargoActual(recargoactual);
                //agregamos la morosidad
                recargoMensualBeans.Agregar();
         
            }
            else{
    
            }



        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error " + ex.getMessage(), "ControlarPagoAnual()", JOptionPane.ERROR_MESSAGE);

        }
    }


    /*
     * Carga el porcentaje de morosidad mensual
     * 
     */
    private void cargarPorcentajeMorosidadMensual() {
        try {
            if (porcentajesMorosidadMensualBeans.Consultar() == true) {
                this.porcentajeMorosidadMensual = porcentajesMorosidadMensualBeans.getPorcentaje();

            } else {
                JOptionPane.showMessageDialog(null, " No se han asignado porcentajes de Morosidad MEnsual", "Mensajes", JOptionPane.ERROR_MESSAGE);
                return;
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error " + ex.getMessage(), "cargarPorcentajeMorosidadMensual()", JOptionPane.ERROR_MESSAGE);

        }
    }

    private void cargarPorcentajeMorosidadAnual() {
        try {
            if (porcentajesMorosidadAnualBeans.Consultar() == true) {
                this.porcentajeMorosidadAnual = porcentajesMorosidadAnualBeans.getPorcentaje();

            } else {
                JOptionPane.showMessageDialog(null, " No se han asignado porcentajes de Morosidad Anual", "Mensajes", JOptionPane.ERROR_MESSAGE);
                return;
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error " + ex.getMessage(), "cargarPorcentajeMorosidadAnual()", JOptionPane.ERROR_MESSAGE);

        }
    }
} //class